package com.jiazhong.basic.pack0718;

import java.lang.reflect.Constructor;

// 反射---对象（构造方法）
public class DemoB {

    public static void main(String[] args) throws Exception {
        // 首先要有类
        Class c = Class.forName("com.jiazhong.pack0718.Person");
        // 获取到类的对象
        // 1.有构造方法
        // 所有的构造方法
        Constructor[] allConstructor = c.getDeclaredConstructors();
        for (int i = 0; i < allConstructor.length; i++) {
            System.out.println(allConstructor[i]);
        }
        System.out.println("-------------------------------------");
        // 获取具体构造方法
        Constructor constructor1 = c.getDeclaredConstructor();
        // Constructor constructor2 = c.getDeclaredConstructor(String.class); // ❌
        Constructor constructor3 = c.getDeclaredConstructor(String.class, Character.class);
        Constructor constructor4 = c.getDeclaredConstructor(Integer.TYPE, String.class, Character.class, String.class);
        System.out.println(constructor1);
        // System.out.println(constructor2);
        System.out.println(constructor3);
        System.out.println(constructor4);
        System.out.println("-------------------------------------");
        // 产生类的对象
        Object obj1 = constructor1.newInstance();
        Object obj3 = constructor3.newInstance("张三", '男');
        constructor4.setAccessible(true); // 允许访问私有内容
        Object obj4 = constructor4.newInstance(1, "李四", '男', "2000-1-1");
        System.out.println(obj1);
        System.out.println(obj3);
        System.out.println(obj4);

    }
}
